/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controladores;

import controladores.exceptions.IllegalOrphanException;
import controladores.exceptions.NonexistentEntityException;
import controladores.exceptions.PreexistingEntityException;
import entidades.Actividadesacademicas;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import entidades.Tipoactividad;
import entidades.Items;
import entidades.Actividades;
import java.util.ArrayList;

/**
 *
 * @author Andres
 */
public class ActividadesacademicasJpaController {

    public ActividadesacademicasJpaController() {
        emf = Persistence.createEntityManagerFactory("proyectoCongresoPU");
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(Actividadesacademicas actividadesacademicas) throws IllegalOrphanException, PreexistingEntityException, Exception {
        List<String> illegalOrphanMessages = null;
        Actividades actividadesOrphanCheck = actividadesacademicas.getActividades();
        if (actividadesOrphanCheck != null) {
            Actividadesacademicas oldActividadesacademicasOfActividades = actividadesOrphanCheck.getActividadesacademicas();
            if (oldActividadesacademicasOfActividades != null) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("The Actividades " + actividadesOrphanCheck + " already has an item of type Actividadesacademicas whose actividades column cannot be null. Please make another selection for the actividades field.");
            }
        }
        if (illegalOrphanMessages != null) {
            throw new IllegalOrphanException(illegalOrphanMessages);
        }
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Tipoactividad tipoactividad = actividadesacademicas.getTipoactividad();
            if (tipoactividad != null) {
                tipoactividad = em.getReference(tipoactividad.getClass(), tipoactividad.getIdtipo());
                actividadesacademicas.setTipoactividad(tipoactividad);
            }
            Items items = actividadesacademicas.getItems();
            if (items != null) {
                items = em.getReference(items.getClass(), items.getIditem());
                actividadesacademicas.setItems(items);
            }
            Actividades actividades = actividadesacademicas.getActividades();
            if (actividades != null) {
                actividades = em.getReference(actividades.getClass(), actividades.getCodigo());
                actividadesacademicas.setActividades(actividades);
            }
            em.persist(actividadesacademicas);
            if (tipoactividad != null) {
                tipoactividad.getActividadesacademicasList().add(actividadesacademicas);
                tipoactividad = em.merge(tipoactividad);
            }
            if (items != null) {
                items.getActividadesacademicasList().add(actividadesacademicas);
                items = em.merge(items);
            }
            if (actividades != null) {
                actividades.setActividadesacademicas(actividadesacademicas);
                actividades = em.merge(actividades);
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            if (findActividadesacademicas(actividadesacademicas.getActividadesCodigo()) != null) {
                throw new PreexistingEntityException("Actividadesacademicas " + actividadesacademicas + " already exists.", ex);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(Actividadesacademicas actividadesacademicas) throws IllegalOrphanException, NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Actividadesacademicas persistentActividadesacademicas = em.find(Actividadesacademicas.class, actividadesacademicas.getActividadesCodigo());
            Tipoactividad tipoactividadOld = persistentActividadesacademicas.getTipoactividad();
            Tipoactividad tipoactividadNew = actividadesacademicas.getTipoactividad();
            Items itemsOld = persistentActividadesacademicas.getItems();
            Items itemsNew = actividadesacademicas.getItems();
            Actividades actividadesOld = persistentActividadesacademicas.getActividades();
            Actividades actividadesNew = actividadesacademicas.getActividades();
            List<String> illegalOrphanMessages = null;
            if (actividadesNew != null && !actividadesNew.equals(actividadesOld)) {
                Actividadesacademicas oldActividadesacademicasOfActividades = actividadesNew.getActividadesacademicas();
                if (oldActividadesacademicasOfActividades != null) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("The Actividades " + actividadesNew + " already has an item of type Actividadesacademicas whose actividades column cannot be null. Please make another selection for the actividades field.");
                }
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            if (tipoactividadNew != null) {
                tipoactividadNew = em.getReference(tipoactividadNew.getClass(), tipoactividadNew.getIdtipo());
                actividadesacademicas.setTipoactividad(tipoactividadNew);
            }
            if (itemsNew != null) {
                itemsNew = em.getReference(itemsNew.getClass(), itemsNew.getIditem());
                actividadesacademicas.setItems(itemsNew);
            }
            if (actividadesNew != null) {
                actividadesNew = em.getReference(actividadesNew.getClass(), actividadesNew.getCodigo());
                actividadesacademicas.setActividades(actividadesNew);
            }
            actividadesacademicas = em.merge(actividadesacademicas);
            if (tipoactividadOld != null && !tipoactividadOld.equals(tipoactividadNew)) {
                tipoactividadOld.getActividadesacademicasList().remove(actividadesacademicas);
                tipoactividadOld = em.merge(tipoactividadOld);
            }
            if (tipoactividadNew != null && !tipoactividadNew.equals(tipoactividadOld)) {
                tipoactividadNew.getActividadesacademicasList().add(actividadesacademicas);
                tipoactividadNew = em.merge(tipoactividadNew);
            }
            if (itemsOld != null && !itemsOld.equals(itemsNew)) {
                itemsOld.getActividadesacademicasList().remove(actividadesacademicas);
                itemsOld = em.merge(itemsOld);
            }
            if (itemsNew != null && !itemsNew.equals(itemsOld)) {
                itemsNew.getActividadesacademicasList().add(actividadesacademicas);
                itemsNew = em.merge(itemsNew);
            }
            if (actividadesOld != null && !actividadesOld.equals(actividadesNew)) {
                actividadesOld.setActividadesacademicas(null);
                actividadesOld = em.merge(actividadesOld);
            }
            if (actividadesNew != null && !actividadesNew.equals(actividadesOld)) {
                actividadesNew.setActividadesacademicas(actividadesacademicas);
                actividadesNew = em.merge(actividadesNew);
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = actividadesacademicas.getActividadesCodigo();
                if (findActividadesacademicas(id) == null) {
                    throw new NonexistentEntityException("The actividadesacademicas with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Actividadesacademicas actividadesacademicas;
            try {
                actividadesacademicas = em.getReference(Actividadesacademicas.class, id);
                actividadesacademicas.getActividadesCodigo();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The actividadesacademicas with id " + id + " no longer exists.", enfe);
            }
            Tipoactividad tipoactividad = actividadesacademicas.getTipoactividad();
            if (tipoactividad != null) {
                tipoactividad.getActividadesacademicasList().remove(actividadesacademicas);
                tipoactividad = em.merge(tipoactividad);
            }
            Items items = actividadesacademicas.getItems();
            if (items != null) {
                items.getActividadesacademicasList().remove(actividadesacademicas);
                items = em.merge(items);
            }
            Actividades actividades = actividadesacademicas.getActividades();
            if (actividades != null) {
                actividades.setActividadesacademicas(null);
                actividades = em.merge(actividades);
            }
            em.remove(actividadesacademicas);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<Actividadesacademicas> findActividadesacademicasEntities() {
        return findActividadesacademicasEntities(true, -1, -1);
    }

    public List<Actividadesacademicas> findActividadesacademicasEntities(int maxResults, int firstResult) {
        return findActividadesacademicasEntities(false, maxResults, firstResult);
    }

    private List<Actividadesacademicas> findActividadesacademicasEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            cq.select(cq.from(Actividadesacademicas.class));
            Query q = em.createQuery(cq);
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public Actividadesacademicas findActividadesacademicas(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(Actividadesacademicas.class, id);
        } finally {
            em.close();
        }
    }

    public int getActividadesacademicasCount() {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            Root<Actividadesacademicas> rt = cq.from(Actividadesacademicas.class);
            cq.select(em.getCriteriaBuilder().count(rt));
            Query q = em.createQuery(cq);
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }

}
